import { ROLE_TYPE } from '@/config/app';
import { useUserStore } from '@/store'; // 添加useUserStore导入

/**
 * 初始化TabBar
 */
export async function initTabBar() {
    try {
        const userStore = useUserStore();

        // 从本地存储加载用户角色
        const savedRole = uni.getStorageSync('userRole');
        const userRole = Object.values(ROLE_TYPE).includes(savedRole)
            ? savedRole
            : ROLE_TYPE.USER;

        // 设置用户角色
        userStore.setRole(userRole);

        // 加载TabBar数据
        await userStore.fetchTabbarData();

        console.log('TabBar初始化成功');
        return true;
    } catch (error) {
        console.error('TabBar初始化失败:', error);
        return false;
    }
}

/**
 * 切换TabBar（用户端/商家端）
 */
export async function switchTabBar(role) {
    try {
        const userStore = useUserStore();

        // 验证角色类型
        if (!Object.values(ROLE_TYPE).includes(role)) {
            throw new Error('无效的角色类型');
        }

        // 设置新角色
        userStore.setRole(role);

        // 重新加载TabBar数据
        await userStore.fetchTabbarData();

        console.log('TabBar切换成功:', role);
        return true;
    } catch (error) {
        console.error('TabBar切换失败:', error);
        return false;
    }
}

/**
 * 更新TabBar选中状态
 */
export function updateTabBarSelected(index) {
    try {
        // 1. 更新Pinia store中的tabIndex
        const userStore = useUserStore();
        userStore.setTabIndex(index);

        // 2. 尝试更新自定义tabBar（通过全局事件）
        uni.$emit('updateTabBar', { selected: index });

        // 3. 尝试更新原生tabBar（如果可用）
        if (typeof this.getTabBar === 'function' && this.getTabBar()) {
            this.getTabBar().setData({
                active: index
            });
        }

        return true;
    } catch (error) {
        console.warn('更新TabBar选中状态失败:', error);
        return false;
    }
}

/**
 * 切换用户角色
 */
export async function switchRole(newRole) {
    try {
        // 切换TabBar角色
        const success = await switchTabBar(newRole);

        if (success) {
            // 保存角色到本地存储
            uni.setStorageSync('userRole', newRole);
            console.log('用户角色切换成功:', newRole);
            return true;
        }

        return false;
    } catch (error) {
        console.error('切换用户角色失败:', error);
        return false;
    }
}

/**
 * 获取当前TabBar配置
 */
export function getCurrentTabBar() {
    try {
        const userStore = useUserStore();
        return userStore.tabbar || [];
    } catch (error) {
        console.warn('获取当前TabBar配置失败:', error);
        return [];
    }
}